#include <iostream>
#include <jsoncpp/json/json.h>
#include <unistd.h>

using namespace std;

// Json命名空间中包含：Value Read StyledWriter FastWriter
//Value对象用来构建json对象(键值对风格的字符串)
//FastWriter对象用来输出json对象，StyledWriter对象用来输出风格化的json对象
//Reader对象的parse方法，传入一个string对象和Value对象，可以解析json字符串并构建Value对象
//用int x = v["x"].asInt();可以获取json对象中的x的值，asInt()方法用来获取整形值



int main() 
{
    //构建KV的json对象
    Json::Value part1;
    part1["haha"] = "haha";
    part1["hehe"] = "hehe";


    Json::Value root;       //Json是命名空间，Value是类名
    root["x"] = 100;
    root["y"] = 200;
    root["op"] = '+';
    root["desc"] = "this is a + oper";
    root["test"] = part1;

    //输出json对象
    Json::StyledWriter w; 
    string json_str = w.write(root);
    cout << json_str << endl;


    //解析json对象
    Json::Reader r;
    Json::Value v;
    //解析的数据放到v中
    r.parse(json_str, v);

    int x = v["x"].asInt();
    char op = v["op"].asInt();      //字符也是整形家族
    string desc = v["desc"].asString();
    Json::Value test = v["test"];
    string haha = test["haha"].asString();

    cout << "x: " << x << endl;
    cout << "op: " << op << endl;
    cout << "desc: " << desc << endl;
    cout << "haha: " << haha << endl;

    return 0;
}